﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Crosland.Automotriz.Logic.Interfaces;
using Crosland.Automotriz.Logic.Linq;
using Crosland.Automotriz.Core;
using System.Configuration;
using Crosland.Automotriz.Facade.Interface;
using Crosland.Automotriz.Facade.Facade;
using Crosland.Automotriz.Logic.Funciones;
using Crosland.Automotriz.Logic.ControlExeption;
namespace Crosland.Automotriz.Web.Repuestos
{
    public partial class wFrmRegistroMetasListado : System.Web.UI.Page
    {
        iTablaGeneralDet itablageneralDet = new clsT_Mae_Tabla_General_DetLogic();
        iFacadeRegistroMetas registroMetas = new FacadeRegistroMetas();
        clsT_Ven_Metas_VendedorLogic vendedor = new clsT_Ven_Metas_VendedorLogic();
        clsT_Ven_Metas_OficinaLogic oficina = new clsT_Ven_Metas_OficinaLogic();   
        string idNegocio = ConfigurationManager.AppSettings["Negocio"];
    
        static List<listaMetasVendedor> listmetavendedor;
        static List<listaMetasOficina> listmetaoficina;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack) 
            {
                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", "JavaScript:confirmSubmitResult();", true);
                listmetavendedor = new List<listaMetasVendedor>();
                listmetaoficina = new List<listaMetasOficina>();            
                this.ListaArea();
                cboArea.SelectedIndex = 0;
                this.ListaMetas();
                cboMeta.SelectedIndex = 0;
                cboAnio.Text = Convert.ToString(DateTime.Now.Year);

                if (Request.QueryString["idEstado"] != null && Request.QueryString["anio"] != null && Request.QueryString["mes"] != null)
                {
                    cboArea.Value = Request.QueryString["mes"];
                    cboArea_SelectedIndexChanged(null, null);
                    cboMeta.Value = Request.QueryString["idEstado"];
                    cboAnio.Value = Request.QueryString["anio"];
                    
                    btnConsultar_Click(null, null);
                }
                else 
                {
                    this.ListaFiltro();
                }
            }
        }

        void ListaFiltro() {

            this.ListaMetasVendedor();
            grdListaMetasVendedor.ClientVisible = true;
            grdListaMetasOficina.ClientVisible = false;
            if (Globales.countRegistros == 0)
            {
                this.ListaMetasOficina();
                grdListaMetasVendedor.ClientVisible = false;
                grdListaMetasOficina.ClientVisible = true;
            }
        
        }

    
  

        void ListaMetasVendedor() {

            try
            {
             clsT_Ven_Metas_VendedorLogic clst_ven_metas_ven = new clsT_Ven_Metas_VendedorLogic();
             String strTipoMeta = registroMetas.RetorTipoValor(Convert.ToInt32(cboMeta.SelectedItem.Value)) ?? "";
             grdListaMetasVendedor.DataSource = clst_ven_metas_ven.lista(Convert.ToInt32(cboMeta.SelectedItem.Value),Convert.ToString(cboAnio.SelectedItem.Value),strTipoMeta);
             grdListaMetasVendedor.DataBind();
            }
            catch (DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ListaMetasVendedor");
                MensajesError(ex.Message, ex, "ListaMetasVendedor");
            }
            catch (Exception ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ListaMetasVendedor");
                MensajesError(ex.Message, ex, "ListaMetasVendedor");
            }

          
              
        }

        private void GuardarExceptionLog(String msgUsu, Exception ex, String metError)
        {
            try
            {
                String msgReal, fhError, pagError, codUsu;
                msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
                pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
                codUsu = Session["User"].ToString();
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");

                System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
                int number = 0;
                for (int i = 0; i < trace.FrameCount; i++)
                {
                    System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                    number = sf.GetFileLineNumber();
                }
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                new Logg().ErrorLog(Server.MapPath("~/Logs/ErrorLog.csv"), msgUsu, msgReal, pagError, metError, codUsu, number);
            }
            catch (DataException e)
            {

                MensajesError(e.Message, e, "GuardarExceptionLog");
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "GuardarExceptionLog");
            }

        }

        private void MensajesError(String msgUsu, Exception ex, String metError)
        {
            Crosland.Automotriz.Web.UserControl.MensajeError uc = (Crosland.Automotriz.Web.UserControl.MensajeError)Master.FindControl("ucErrorMensaje");
            String msgReal, fhError, pagError, codUsu;
            msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
            pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
            codUsu = Session["User"].ToString();
            fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
            System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
            int number = 0;
            for (int i = 0; i < trace.FrameCount; i++)
            {
                System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                number = sf.GetFileLineNumber();
            }
            uc.Errores(msgUsu, msgReal, fhError, pagError, metError, codUsu, number);
        }

        void ListaMetasOficina()
        {

            try
            {
            clsT_Ven_Metas_OficinaLogic clst_ven_metas_oficina = new clsT_Ven_Metas_OficinaLogic();
            String strTipoMeta = registroMetas.RetorTipoValor(Convert.ToInt32(cboMeta.SelectedItem.Value)) ?? "";
            grdListaMetasOficina.DataSource = clst_ven_metas_oficina.lista(Convert.ToInt32(cboMeta.SelectedItem.Value), Convert.ToString(cboAnio.SelectedItem.Value),strTipoMeta);
            grdListaMetasOficina.DataBind();
            }
            catch (DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ListaMetasOficina");
                MensajesError(ex.Message, ex, "ListaMetasOficina");
            }
            catch (Exception ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ListaMetasOficina");
                MensajesError(ex.Message, ex, "ListaMetasOficina");
            }

          

        }

        public void ListaArea() {

            cboArea.DataSource = itablageneralDet.listaArea();
            cboArea.TextField = "DES_CORTA";
            cboArea.ValueField = "ID_GENERAL_DET";
            cboArea.DataBind();
        
        
        }

        public void ListaMetas() {

            clsT_Ven_Metas_CabLogic clst_ven_meta = new clsT_Ven_Metas_CabLogic();
            List<T_META> listMeta = new List<T_META>();
            foreach (var item in clst_ven_meta.lista(Convert.ToInt32(cboArea.SelectedItem.Value)))
            {
                T_META l = new T_META();
                l.ID_UBIC_VEND_CAB = item.ID_UBIC_VEND_CAB;
                String strTipoMeta = registroMetas.RetorTipoValor(item.ID_UBIC_VEND_CAB.Value) ?? "";
                l.Descripcion = item.Descripcion +" ("+strTipoMeta.ToLower()+ ")";                
                listMeta.Add(l);
            }
            cboMeta.DataSource = listMeta;
            cboMeta.TextField = "Descripcion";
            cboMeta.ValueField = "ID_UBIC_VEND_CAB";
            cboMeta.DataBind();        
        }

 

        protected void cboArea_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.ListaMetas();
            cboMeta.SelectedIndex = 0;
        }

        protected void btnConsultar_Click(object sender, EventArgs e)
        {
            this.ListaMetasVendedor();
            grdListaMetasVendedor.ClientVisible = true;
            grdListaMetasOficina.ClientVisible = false;
            if (Globales.countRegistros == 0) {
                this.ListaMetasOficina();
                grdListaMetasVendedor.ClientVisible = false;
                grdListaMetasOficina.ClientVisible = true;
            }
        
        }

        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            try
            {
            Session["ID_UBIC_VEND_CAB"] = Convert.ToInt32(cboMeta.SelectedItem.Value);
            Session["Vendedor_Oficina"] = registroMetas.Lista_vendedor_ofocina(Convert.ToInt32(cboMeta.SelectedItem.Value));
            Response.Redirect("~/Repuestos/wFrmRegistroMetasGenerarCabecera.aspx?id=" + idNegocio);
            }
            catch (Exception ex)
            {
                lblmsj.Text = "ERROR: " + ex.Message;
                popupmsj.ShowOnPageLoad = true;

            }


        }

        protected void btnSalir_Click(object sender, EventArgs e)
        {
         
            Response.Redirect("~/Seguridad/wFrmDefault.aspx?id=" + idNegocio);
        }
   
        protected void grdListaMetasVendedor_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            this.ListaMetasVendedor();
            grdListaMetasVendedor.ClientVisible = true;
            grdListaMetasOficina.ClientVisible = false;
            if (Globales.countRegistros == 0)
            {
                this.ListaMetasOficina();
                grdListaMetasVendedor.ClientVisible = false;
                grdListaMetasOficina.ClientVisible = true;
            }
        
        }

        protected void grdListaMetasOficina_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            this.ListaMetasVendedor();
            grdListaMetasVendedor.ClientVisible = true;
            grdListaMetasOficina.ClientVisible = false;
            if (Globales.countRegistros == 0)
            {
                this.ListaMetasOficina();
                grdListaMetasVendedor.ClientVisible = false;
                grdListaMetasOficina.ClientVisible = true;
            }
        
        }

        protected void btnFiltrarReplicaVen_Click(object sender, EventArgs e)
        {
            this.ListaVendedorAnioMes();
        }

        void ListaVendedorAnioMes()
        {
            listmetavendedor.Clear();
            try
            {

             

                listaMetasVendedor lista = new listaMetasVendedor();

                foreach (var s in vendedor.filtroAnioMes(Convert.ToInt32(cboMeta.SelectedItem.Value), Convert.ToString(cboRAno.Value), Convert.ToString(cboRmes.Value)))
                {

                    lista.ID_UBIC_VEND_CAB = s.ID_UBIC_VEND_CAB;
                    lista.ID_GRUPO_ARTICULO = s.ID_GRUPO_ARTICULO;
                    lista.ID_VENDEDOR = s.ID_VENDEDOR;
                    lista.MES = s.MES;
                    lista.ANIO = s.ANIO;
                    lista.CANT = s.CANT;
                    lista.NOM_VENDEDOR = s.NOM_VENDEDOR;
                    lista.NRORUEDAS = s.NRORUEDAS;
                    lista.NOM_ID_GRUPO_ARTICULO = s.NOM_ID_GRUPO_ARTICULO;
                    lista.IMP_META = s.IMP_META;
                    lista.MONEDA = s.MONEDA;
                    lista.ID_MONEDA = s.ID_MONEDA;
                    listmetavendedor.Add(lista);


                }
                grdMetasVendedor.DataSource = listmetavendedor;
                grdMetasVendedor.DataBind();
            }
            catch (DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ListaVendedorAnioMes");
                MensajesError(ex.Message, ex, "ListaVendedorAnioMes");
            }
            catch (Exception ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ListaVendedorAnioMes");
                MensajesError(ex.Message, ex, "ListaVendedorAnioMes");
            }


        }

        void ListaOficinaAnioMes()
        {
            listmetaoficina.Clear();

            try
            {

                listaMetasOficina lista = new listaMetasOficina();

                foreach (var s in oficina.listaOficinaMetas(Convert.ToInt32(cboMeta.SelectedItem.Value), Convert.ToString(cboRAnoOficina.Value), Convert.ToString(cboRMesOficina.Value)))
                {

                    lista.ID_UBIC_VEND_CAB = s.ID_UBIC_VEND_CAB;
                    lista.ID_GRUPO_ARTICULO = s.ID_GRUPO_ARTICULO;
                    lista.ID_OFI_VTA = s.ID_OFI_VTA;
                    lista.MES = s.MES;
                    lista.ANIO = s.ANIO;
                    lista.CANT = s.CANT;
                    lista.NOM_OFICINA = s.NOM_OFICINA;
                    lista.NroRuedas = s.NroRuedas;
                    lista.ID_CANAL_DISTRIB = s.ID_CANAL_DISTRIB;
                    lista.NOM_ID_GRUPO_ARTICULO = s.NOM_ID_GRUPO_ARTICULO;
                    lista.IMP_META = s.IMP_META;
                    lista.ID_MONEDA = s.ID_MONEDA;

                    listmetaoficina.Add(lista);


                }
                grdMetasOficina.DataSource = listmetaoficina;
                grdMetasOficina.DataBind();
            }
            catch(Exception ex)
            {
                lblmsj.Text = "ERROR: " + ex.Message;
                popupmsj.ShowOnPageLoad = true;
            }

        }

        void GrabarReplica()
        {


            try
            {
                clsT_Ven_Metas_VendedorLogic clst_ven_metas_vendedor = new clsT_Ven_Metas_VendedorLogic();



                foreach (listaMetasVendedor row in listmetavendedor)
                {                    
                    int ID_UBIC_VEND_CAB = row.ID_UBIC_VEND_CAB;
                    int ID_VENDEDOR = row.ID_VENDEDOR;
                    string ANIO = Convert.ToString(cboRAnoVentaD.SelectedItem.Value);
                    string MES = Convert.ToString(cboRMesVentaD.SelectedItem.Value);
                    int ID_GRUPO_ARTICULO = row.ID_GRUPO_ARTICULO;
                    string NroRuedas = row.NRORUEDAS;
                    int CANT = row.CANT;
                    int? IMP_META = row.IMP_META;
                    int? ID_MONEDA = row.ID_MONEDA;
                    clst_ven_metas_vendedor.InsertaReplicacion(ID_UBIC_VEND_CAB, ID_VENDEDOR, ID_GRUPO_ARTICULO, ANIO, MES, NroRuedas, CANT,IMP_META,ID_MONEDA);
                    
                    lblmsj.Text = String.Empty;
                    lblmsj.Text = "Se Replicó correctamente ";
                    string script = "ShowMsj();";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", script, true);
                }

            }
            catch(Exception ex)
            {   lblmsj.Text = "ERROR: " + ex.Message;
                popupmsj.ShowOnPageLoad = true;
            }

        }

        void GrabarReplicaOficina()
        {


            try
            {
                clsT_Ven_Metas_OficinaLogic clst_ven_metas_oficina = new clsT_Ven_Metas_OficinaLogic();



                foreach (listaMetasOficina row in listmetaoficina)
                {


                    int ID_UBIC_VEND_CAB = row.ID_UBIC_VEND_CAB;
                    int ID_OFICINA = row.ID_OFI_VTA;
                    string ANIO = Convert.ToString(cboRAnoOficinaD.SelectedItem.Value);
                    string MES = Convert.ToString(cboRMesOficinaD.SelectedItem.Value);
                    int ID_GRUPO_ARTICULO = row.ID_GRUPO_ARTICULO;
                    int ID_CANAL_DISTRIBUCION = row.ID_CANAL_DISTRIB;
                    string NroRuedas = row.NroRuedas;
                    int CANT = row.CANT;
                    int? IMP_META = row.IMP_META;
                    int? ID_MONEDA = row.ID_MONEDA;

                    clst_ven_metas_oficina.InsertaReplicacionOficina(ID_UBIC_VEND_CAB, ID_CANAL_DISTRIBUCION, ID_OFICINA, ID_GRUPO_ARTICULO, ANIO, MES, NroRuedas, CANT,IMP_META,ID_MONEDA);



                    lblmsj.Text = String.Empty;
                    lblmsj.Text = "Se Replicó correctamente ";
                    string script = "ShowMsj();";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", script, true);


                }

            }
            catch(Exception ex)
            {
                lblmsj.Text = "ERROR: " + ex.Message;
                popupmsj.ShowOnPageLoad = true;
            }

        }

        public struct listaMetasVendedor
        {

            public int ID_UBIC_VEND_CAB { get; set; }
            public int ID_VENDEDOR { get; set; }
            public string ANIO { get; set; }
            public string MES { get; set; }
            public int ID_GRUPO_ARTICULO { get; set; }
            public string NRORUEDAS { get; set; }
            public int CANT { get; set; }
            public string NOM_VENDEDOR { get; set; }
            public string NOM_ID_GRUPO_ARTICULO { get; set; }
            public int? IMP_META { get; set; }
            public string MONEDA { get; set; }
            public int? ID_MONEDA { get; set; }
                 
        }

        public struct listaMetasOficina
        {
            public int ID_UBIC_VEND_CAB { get; set; }
            public int ID_CANAL_DISTRIB { get; set; }
            public int ID_OFI_VTA { get; set; }
            public string ANIO { get; set; }
            public string MES { get; set; }
            public int ID_GRUPO_ARTICULO { get; set; }
            public string NroRuedas { get; set; }
            public int CANT { get; set; }
            public string NOM_OFICINA { get; set; }
            public string NOM_ID_GRUPO_ARTICULO { get; set; }
            public int? IMP_META { get; set; }
            public string MONEDA { get; set; }
            public int? ID_MONEDA { get; set; }

        }

        protected void btnFiltrarReplicaOfi_Click(object sender, EventArgs e)
        {
            this.ListaOficinaAnioMes();
        }

        protected void btnReplicar_Click(object sender, EventArgs e)
        {
            try
            {
                string l = registroMetas.Lista_vendedor_ofocina(Convert.ToInt32(cboMeta.SelectedItem.Value));

                if (l.ToUpper() == "VENDEDOR")
                {

                 
                    cboRmes.Value = LeftRightMid.Right("000" + Convert.ToString(DateTime.Now.Month-1).ToString(),2);
                    cboRAno.Text = Convert.ToString(DateTime.Now.Year);
                    
                    cboRMesVentaD.Text = LeftRightMid.Right("000" + Convert.ToString(DateTime.Now.Month).ToString(), 2);
                    cboRAnoVentaD.Text = Convert.ToString(DateTime.Now.Year);
                    this.ListaVendedorAnioMes();
                   
                    PCReplicaMetasVendedor.ShowOnPageLoad = true;
                }
                else
                {
                    cboRMesOficina.Value = LeftRightMid.Right("000" + Convert.ToString(DateTime.Now.Month-1).ToString(),2);
                    cboRAnoOficina.Text = Convert.ToString(DateTime.Now.Year);
                    
                    cboRMesOficinaD.Text = LeftRightMid.Right("000" + Convert.ToString(DateTime.Now.Month).ToString(), 2);
                    cboRAnoOficinaD.Text = Convert.ToString(DateTime.Now.Year);
                    this.ListaOficinaAnioMes();
                    PCReplicaMetasOficina.ShowOnPageLoad = true;

                }
            }
            catch(Exception ex)
            {
                lblmsj.Text = "ERROR: " + ex.Message;
                popupmsj.ShowOnPageLoad = true;
              
            }

        }

        protected void grdMetasVendedor_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            this.ListaVendedorAnioMes();
        }

        protected void grdMetasOficina_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            this.ListaOficinaAnioMes();
        }

        protected void btnProcesarVendedor_Click(object sender, EventArgs e)
        {
            if (grdMetasVendedor.VisibleRowCount == 0)
            {


                lblmsj.Text = String.Empty;
                lblmsj.Text = "No hay datos para replicar de la fecha seleccionada";
                string script = "ShowMsj();";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", script, true);
            }
            else { 
              this.GrabarReplica();
            
            }
          
        }

        protected void btnProcesarOficina_Click(object sender, EventArgs e)
        {
            if (grdMetasOficina.VisibleRowCount == 0)
            {

                lblmsj.Text = String.Empty;
                lblmsj.Text = "No hay datos para replicar de la fecha seleccionada";
                string script = "ShowMsj();";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", script, true);
            }
            else
            {

                this.GrabarReplicaOficina();
            }
        }

        protected void btnActualizar_Click(object sender, EventArgs e)
        {
            try
            {
                Session["ID_UBIC_VEND_CAB"] = Convert.ToInt32(cboMeta.SelectedItem.Value);
                Session["ANIO"] = Convert.ToInt32(cboAnio.SelectedItem.Value);
                Session["MES"] = Convert.ToInt32(cboArea.SelectedItem.Value);
                Session["des_meta"] = cboMeta.Text;
                Session["Vendedor_Oficina"] = registroMetas.Lista_vendedor_ofocina(Convert.ToInt32(cboMeta.SelectedItem.Value));
                //Response.Redirect(String.Format("~/Repuestos/wFrmRegistroMetasActualizar.aspx?id={0}&idEstado={1}", idNegocio, Convert.ToInt32(cboMeta.SelectedItem.Value)));
                Response.Redirect("~/Repuestos/wFrmRegistroMetasActualizar.aspx?id=" + idNegocio + "&idEstado=" + cboMeta.SelectedItem.Value.ToString() + "&anio=" + cboAnio.SelectedItem.Value.ToString() + "&mes=" + cboArea.SelectedItem.Value.ToString());

            }
            catch(Exception ex)
            {   lblmsj.Text = "ERROR: " + ex.Message;
                popupmsj.ShowOnPageLoad = true;
            }
        }
    }
}